module RR_arbiter 
(
    input clk,
    input rst_n,
    input enable,
    input [16-1:0]req,
    output [4-1:0]grant_out 
    );

logic [4-1:0] grant;
dffr #(.DW(4)) grant_ff  (clk,rst_n,enable,grant,grant_out);
always_comb begin
    grant=grant_out;
    case (grant_out)
        4'b0000:begin                            
            grant=req[1]  ? 4'b0001:          
                  req[2]  ? 4'b0010:          
                  req[3]  ? 4'b0011:          
                  req[4]  ? 4'b0100:          
                  req[5]  ? 4'b0101:          
                  req[6]  ? 4'b0110:          
                  req[7]  ? 4'b0111:          
                  req[8]  ? 4'b1000:          
                  req[9]  ? 4'b1001:          
                  req[10]  ? 4'b1010:          
                  req[11]  ? 4'b1011:          
                  req[12]  ? 4'b1100:          
                  req[13]  ? 4'b1101:          
                  req[14]  ? 4'b1110:          
                  req[15]  ? 4'b1111:          
                  req[0]  ? 4'b0000:grant_out;
        end                                        
        4'b0001:begin                            
            grant=req[2]  ? 4'b0010:          
                  req[3]  ? 4'b0011:          
                  req[4]  ? 4'b0100:          
                  req[5]  ? 4'b0101:          
                  req[6]  ? 4'b0110:          
                  req[7]  ? 4'b0111:          
                  req[8]  ? 4'b1000:          
                  req[9]  ? 4'b1001:          
                  req[10]  ? 4'b1010:          
                  req[11]  ? 4'b1011:          
                  req[12]  ? 4'b1100:          
                  req[13]  ? 4'b1101:          
                  req[14]  ? 4'b1110:          
                  req[15]  ? 4'b1111:          
                  req[0]  ? 4'b0000:          
                  req[1]  ? 4'b0001:grant_out;
        end                                        
        4'b0010:begin                            
            grant=req[3]  ? 4'b0011:          
                  req[4]  ? 4'b0100:          
                  req[5]  ? 4'b0101:          
                  req[6]  ? 4'b0110:          
                  req[7]  ? 4'b0111:          
                  req[8]  ? 4'b1000:          
                  req[9]  ? 4'b1001:          
                  req[10]  ? 4'b1010:          
                  req[11]  ? 4'b1011:          
                  req[12]  ? 4'b1100:          
                  req[13]  ? 4'b1101:          
                  req[14]  ? 4'b1110:          
                  req[15]  ? 4'b1111:          
                  req[0]  ? 4'b0000:          
                  req[1]  ? 4'b0001:          
                  req[2]  ? 4'b0010:grant_out;
        end                                        
        4'b0011:begin                            
            grant=req[4]  ? 4'b0100:          
                  req[5]  ? 4'b0101:          
                  req[6]  ? 4'b0110:          
                  req[7]  ? 4'b0111:          
                  req[8]  ? 4'b1000:          
                  req[9]  ? 4'b1001:          
                  req[10]  ? 4'b1010:          
                  req[11]  ? 4'b1011:          
                  req[12]  ? 4'b1100:          
                  req[13]  ? 4'b1101:          
                  req[14]  ? 4'b1110:          
                  req[15]  ? 4'b1111:          
                  req[0]  ? 4'b0000:          
                  req[1]  ? 4'b0001:          
                  req[2]  ? 4'b0010:          
                  req[3]  ? 4'b0011:grant_out;
        end                                        
        4'b0100:begin                            
            grant=req[5]  ? 4'b0101:          
                  req[6]  ? 4'b0110:          
                  req[7]  ? 4'b0111:          
                  req[8]  ? 4'b1000:          
                  req[9]  ? 4'b1001:          
                  req[10]  ? 4'b1010:          
                  req[11]  ? 4'b1011:          
                  req[12]  ? 4'b1100:          
                  req[13]  ? 4'b1101:          
                  req[14]  ? 4'b1110:          
                  req[15]  ? 4'b1111:          
                  req[0]  ? 4'b0000:          
                  req[1]  ? 4'b0001:          
                  req[2]  ? 4'b0010:          
                  req[3]  ? 4'b0011:          
                  req[4]  ? 4'b0100:grant_out;
        end                                        
        4'b0101:begin                            
            grant=req[6]  ? 4'b0110:          
                  req[7]  ? 4'b0111:          
                  req[8]  ? 4'b1000:          
                  req[9]  ? 4'b1001:          
                  req[10]  ? 4'b1010:          
                  req[11]  ? 4'b1011:          
                  req[12]  ? 4'b1100:          
                  req[13]  ? 4'b1101:          
                  req[14]  ? 4'b1110:          
                  req[15]  ? 4'b1111:          
                  req[0]  ? 4'b0000:          
                  req[1]  ? 4'b0001:          
                  req[2]  ? 4'b0010:          
                  req[3]  ? 4'b0011:          
                  req[4]  ? 4'b0100:          
                  req[5]  ? 4'b0101:grant_out;
        end                                        
        4'b0110:begin                            
            grant=req[7]  ? 4'b0111:          
                  req[8]  ? 4'b1000:          
                  req[9]  ? 4'b1001:          
                  req[10]  ? 4'b1010:          
                  req[11]  ? 4'b1011:          
                  req[12]  ? 4'b1100:          
                  req[13]  ? 4'b1101:          
                  req[14]  ? 4'b1110:          
                  req[15]  ? 4'b1111:          
                  req[0]  ? 4'b0000:          
                  req[1]  ? 4'b0001:          
                  req[2]  ? 4'b0010:          
                  req[3]  ? 4'b0011:          
                  req[4]  ? 4'b0100:          
                  req[5]  ? 4'b0101:          
                  req[6]  ? 4'b0110:grant_out;
        end                                        
        4'b0111:begin                            
            grant=req[8]  ? 4'b1000:          
                  req[9]  ? 4'b1001:          
                  req[10]  ? 4'b1010:          
                  req[11]  ? 4'b1011:          
                  req[12]  ? 4'b1100:          
                  req[13]  ? 4'b1101:          
                  req[14]  ? 4'b1110:          
                  req[15]  ? 4'b1111:          
                  req[0]  ? 4'b0000:          
                  req[1]  ? 4'b0001:          
                  req[2]  ? 4'b0010:          
                  req[3]  ? 4'b0011:          
                  req[4]  ? 4'b0100:          
                  req[5]  ? 4'b0101:          
                  req[6]  ? 4'b0110:          
                  req[7]  ? 4'b0111:grant_out;
        end                                        
        4'b1000:begin                            
            grant=req[9]  ? 4'b1001:          
                  req[10]  ? 4'b1010:          
                  req[11]  ? 4'b1011:          
                  req[12]  ? 4'b1100:          
                  req[13]  ? 4'b1101:          
                  req[14]  ? 4'b1110:          
                  req[15]  ? 4'b1111:          
                  req[0]  ? 4'b0000:          
                  req[1]  ? 4'b0001:          
                  req[2]  ? 4'b0010:          
                  req[3]  ? 4'b0011:          
                  req[4]  ? 4'b0100:          
                  req[5]  ? 4'b0101:          
                  req[6]  ? 4'b0110:          
                  req[7]  ? 4'b0111:          
                  req[8]  ? 4'b1000:grant_out;
        end                                        
        4'b1001:begin                            
            grant=req[10]  ? 4'b1010:          
                  req[11]  ? 4'b1011:          
                  req[12]  ? 4'b1100:          
                  req[13]  ? 4'b1101:          
                  req[14]  ? 4'b1110:          
                  req[15]  ? 4'b1111:          
                  req[0]  ? 4'b0000:          
                  req[1]  ? 4'b0001:          
                  req[2]  ? 4'b0010:          
                  req[3]  ? 4'b0011:          
                  req[4]  ? 4'b0100:          
                  req[5]  ? 4'b0101:          
                  req[6]  ? 4'b0110:          
                  req[7]  ? 4'b0111:          
                  req[8]  ? 4'b1000:          
                  req[9]  ? 4'b1001:grant_out;
        end                                        
        4'b1010:begin                            
            grant=req[11]  ? 4'b1011:          
                  req[12]  ? 4'b1100:          
                  req[13]  ? 4'b1101:          
                  req[14]  ? 4'b1110:          
                  req[15]  ? 4'b1111:          
                  req[0]  ? 4'b0000:          
                  req[1]  ? 4'b0001:          
                  req[2]  ? 4'b0010:          
                  req[3]  ? 4'b0011:          
                  req[4]  ? 4'b0100:          
                  req[5]  ? 4'b0101:          
                  req[6]  ? 4'b0110:          
                  req[7]  ? 4'b0111:          
                  req[8]  ? 4'b1000:          
                  req[9]  ? 4'b1001:          
                  req[10]  ? 4'b1010:grant_out;
        end                                        
        4'b1011:begin                            
            grant=req[12]  ? 4'b1100:          
                  req[13]  ? 4'b1101:          
                  req[14]  ? 4'b1110:          
                  req[15]  ? 4'b1111:          
                  req[0]  ? 4'b0000:          
                  req[1]  ? 4'b0001:          
                  req[2]  ? 4'b0010:          
                  req[3]  ? 4'b0011:          
                  req[4]  ? 4'b0100:          
                  req[5]  ? 4'b0101:          
                  req[6]  ? 4'b0110:          
                  req[7]  ? 4'b0111:          
                  req[8]  ? 4'b1000:          
                  req[9]  ? 4'b1001:          
                  req[10]  ? 4'b1010:          
                  req[11]  ? 4'b1011:grant_out;
        end                                        
        4'b1100:begin                            
            grant=req[13]  ? 4'b1101:          
                  req[14]  ? 4'b1110:          
                  req[15]  ? 4'b1111:          
                  req[0]  ? 4'b0000:          
                  req[1]  ? 4'b0001:          
                  req[2]  ? 4'b0010:          
                  req[3]  ? 4'b0011:          
                  req[4]  ? 4'b0100:          
                  req[5]  ? 4'b0101:          
                  req[6]  ? 4'b0110:          
                  req[7]  ? 4'b0111:          
                  req[8]  ? 4'b1000:          
                  req[9]  ? 4'b1001:          
                  req[10]  ? 4'b1010:          
                  req[11]  ? 4'b1011:          
                  req[12]  ? 4'b1100:grant_out;
        end                                        
        4'b1101:begin                            
            grant=req[14]  ? 4'b1110:          
                  req[15]  ? 4'b1111:          
                  req[0]  ? 4'b0000:          
                  req[1]  ? 4'b0001:          
                  req[2]  ? 4'b0010:          
                  req[3]  ? 4'b0011:          
                  req[4]  ? 4'b0100:          
                  req[5]  ? 4'b0101:          
                  req[6]  ? 4'b0110:          
                  req[7]  ? 4'b0111:          
                  req[8]  ? 4'b1000:          
                  req[9]  ? 4'b1001:          
                  req[10]  ? 4'b1010:          
                  req[11]  ? 4'b1011:          
                  req[12]  ? 4'b1100:          
                  req[13]  ? 4'b1101:grant_out;
        end                                        
        4'b1110:begin                            
            grant=req[15]  ? 4'b1111:          
                  req[0]  ? 4'b0000:          
                  req[1]  ? 4'b0001:          
                  req[2]  ? 4'b0010:          
                  req[3]  ? 4'b0011:          
                  req[4]  ? 4'b0100:          
                  req[5]  ? 4'b0101:          
                  req[6]  ? 4'b0110:          
                  req[7]  ? 4'b0111:          
                  req[8]  ? 4'b1000:          
                  req[9]  ? 4'b1001:          
                  req[10]  ? 4'b1010:          
                  req[11]  ? 4'b1011:          
                  req[12]  ? 4'b1100:          
                  req[13]  ? 4'b1101:          
                  req[14]  ? 4'b1110:grant_out;
        end                                        
        4'b1111:begin                            
            grant=req[0]  ? 4'b0000:          
                  req[1]  ? 4'b0001:          
                  req[2]  ? 4'b0010:          
                  req[3]  ? 4'b0011:          
                  req[4]  ? 4'b0100:          
                  req[5]  ? 4'b0101:          
                  req[6]  ? 4'b0110:          
                  req[7]  ? 4'b0111:          
                  req[8]  ? 4'b1000:          
                  req[9]  ? 4'b1001:          
                  req[10]  ? 4'b1010:          
                  req[11]  ? 4'b1011:          
                  req[12]  ? 4'b1100:          
                  req[13]  ? 4'b1101:          
                  req[14]  ? 4'b1110:          
                  req[15]  ? 4'b1111:grant_out;
        end                                        
    endcase
end
endmodule
